package wodegua.d31_java高级.d2_reflect;

import java.lang.reflect.Method;

/**
 * 获取类的成员方法
 * Class提供了从类中获取成员方法的API。
 * 方法
 * Method[] getMethods()    获取类的全部成员方法(只能获取pub1ic修饰的)
 * Method[] getDeclaredMethods()    获取类的全部成员方法(只要存在就能拿到)
 * Method getMethod(String name,Class<?>... parameterTypes)     获取类的某个成员方法(只能获取public修饰的)
 * Method getDeclaredMethod(String name,Class<?>... parameterTypes)     获取类的某个成员方法(只要存在就能拿到)
 *
 * 成员方法的作用:依然是执行
 * Method提供的方法
 * public object invoke(object obj,object... args)      触发某个对象的该方法执行。
 * public void setAccessible(boolean flag)       设置为true，表示禁止检查访问控制(暴力反射)
 */
public class Test4Method {
    public static void main(String[] args) throws Exception {
        Class c = Student.class;
        Method[] m = c.getMethods();
        for (Method method : m) {
            System.out.println(method.getName() + "--->" + method.getParameterCount());
        }
        System.out.println("----------------------");
        Method[] m2 = c.getDeclaredMethods();
        for (Method method : m2) {
            System.out.println(method.getName() + "--->" + method.getParameterCount());
        }
        System.out.println("----------------------");
        Method m3 = c.getDeclaredMethod("cc");
        System.out.println(m3.getName());
        System.out.println("----------------------");
        Student student = new Student();
        m3.setAccessible(true);
        Object rs = m3.invoke(student);
        System.out.println(rs);
        System.out.println("----------------------");
    }
}
